home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- PATH=/v/bin:/bin:/usr/bin
- # f77-style shell script to compile and load fortran, C, and assembly codes
- # usage: f77 [-g] [-O] [-o absfile] [-c] files [-l library]
- # -o objfile Override default executable name a.out.
- # -c Do not call linker, leave relocatables in *.o.
- # -S leave assembler output on file.s
- # -l library (passed to ld).
- # -u complain about undeclared variables
- # -w omit all warning messages
- # -w66 omit Fortran 66 compatibility warning messages
- # files FORTRAN source files ending in .f .
- # C source files ending in .c .
- # Assembly language files ending in .s .
- # efl source files ending in .e .
- # -I includepath passed to C compiler (for .c files)
- # -Ntnnn allow nnn entries in table t
- # -cpp -Dxxx pipe through cpp
-
- s=/tmp/stderr_$$
- t=/tmp/f77_$$
- CC=${CC_f2c:-'/usr/bin/cc -m486'}
- EFL=${EFL:-/v/bin/efl}
- EFLFLAGS=${EFLFLAGS:-'system=portable deltastno=10'}
- F2C=${F2C:-/usr/bin/f2c}
- F2CFLAGS=${F2CFLAGS:='-ARw8 -Nn802'}
- rc=0
- lib=/lib/num/lib.lo
- trap "rm -f $s ; exit \$rc" 0
- OUTF=a.out
- cOPT=1
- G=
- CPP=/bin/cat
- CPPFLAGS=
- # set -- `getopt cD:gI:N:Oo:Suw6 "$@"`
- case $? in 0);; *) exit 1;; esac
- CCFLAGS=
- while
- test X"$1" != X--
- do
- case "$1"
- in
- -c) cOPT=0
- shift
- ;;
-
- -D) CPPFLAGS="$CPPFLAGS -D$2"
- shift 2
- ;;
-
- -D*) CPPFLAGS="$CPPFLAGS $1"
- shift 1
- ;;
-
- -g) CFLAGS="$CFLAGS -g -static"
- CCFLAGS="$CCFLAGS -g -static"
- F2CFLAGS="$F2CFLAGS -g"
- G="-g"
- shift;;
-
- -I) CCFLAGS="$CCFLAGS -I$2"
- shift 2
- ;;
-
- -I*) CCFLAGS="$CCFLAGS $1"
- shift 1
- ;;
-
- -o) OUTF=$2
- shift 2
- ;;
-
- -O|-O1|-O2)
- CCFLAGS="$CCFLAGS $1"
- shift
- ;;
-
- -u) F2CFLAGS="$F2CFLAGS -u"
- shift
- ;;
-
- -w) F2CFLAGS="$F2CFLAGS -w"
- case $2 in -6) F2CFLAGS="$F2CFLAGS"66; shift
- case $2 in -6) shift;; esac;; esac
- shift
- ;;
-
- -N) F2CFLAGS="$F2CFLAGS $1""$2"
- shift 2
- ;;
-
- -N*|-C) F2CFLAGS="$F2CFLAGS $1"
- shift 1
- ;;
-
- -cpp) CPP="/lib/cpp -traditional"
- shift 1
- ;;
-
- -S) CFLAGS="$CFLAGS -S"
- cOPT=0
- shift
- ;;
-
- -*)
- echo "invalid parameter $1" 1>&2
- shift
- ;;
-
- *) set -- -- $@
- ;;
- esac
- done
- shift
-
- while
- test -n "$1"
- do
- case "$1"
- in
- *.[fF])
- case "$1" in *.f) f=".f";; *.F) f=".F";; esac
- b=`basename $1 $f`
- trap "rm -f f2ctmp_$b.* ; exit 4" 0
- sed 's/\\$/\\-/' $1| $CPP $CPPFLAGS > f2ctmp_$b.f
- trap "rm -f f2ctmp_$b.* ; exit 4" 0
- $F2C $F2CFLAGS f2ctmp_$b.f
- case $? in 0);; *) rm f2ctmp_* ; exit 5;; esac
- rm -f f2ctmp_$b.f
- mv f2ctmp_$b.c $b.c
- if [ -f f2ctmp_$b.P ]; then mv f2ctmp_$b.P $b.P; fi
- case $? in 0);; *) rm -f $b.c ; exit 5;; esac
- trap "rm -f $s ; exit 4" 0
- $CC $CPPFLAGS -c $CFLAGS $b.c 2>$s
- rc=$?
- sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
- case $rc in 0);; *) exit 5;; esac
- rm -f $b.c
- OFILES="$OFILES $b.o"
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- *.e)
- b=`basename $1 .e`
- $EFL $EFLFLAGS $1 >$b.f
- case $? in 0);; *) exit;; esac
- $F2C $F2CFLAGS $b.f
- case $? in 0);; *) exit;; esac
- $CC -c $CFLAGS $b.c
- case $? in 0);; *) exit;; esac
- OFILES="$OFILES $b.o"
- rm $b.[cf]
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- *.s)
- echo $1: 1>&2
- OFILE=`basename $1 .s`.o
- ${AS:-/usr/bin/as} -o $OFILE $AFLAGS $1
- case $? in 0);; *) exit;; esac
- OFILES="$OFILES $OFILE"
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- *.c)
- echo $1: 1>&2
- OFILE=`basename $1 .c`.o
- $CC -c $CFLAGS $CCFLAGS $CPPFLAGS $1
- rc=$?; case $rc in 0);; *) exit;; esac
- OFILES="$OFILES $OFILE"
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- *.o)
- OFILES="$OFILES $1"
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- -l)
- OFILES="$OFILES -l$2"
- shift 2
- case $cOPT in 1) cOPT=2;; esac
- ;;
- -l*)
- OFILES="$OFILES $1"
- shift
- case $cOPT in 1) cOPT=2;; esac
- ;;
- -o)
- OUTF=$2; shift 2;;
- *)
- OFILES="$OFILES $1"
- shift
- case $cOPT in 1) cOPT=2;; esac
- ;;
- esac
- done
-
- case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esac
- rc=$?
- exit $rc
-